Playing around, like Bayes factor https://en.wikipedia.org/wiki/Likelihood-ratio_test
Compare normal vs beta for beat distributed data
In [4]:
import numpy as np
import scipy
import seaborn as sns
import pymc3 as pm
import matplotlib.pyplot as plt
sns.set(font_scale=1.5)
In [6]:
data_dist = scipy.stats.beta(2, 5)
In [7]:
XX = np.linspace(0, 1, 100)
plt.plot(XX, data_dist.pdf(XX))
Out[7]:
In [8]:
data = data_dist.rvs(size=100)
In [9]:
sns.distplot(data)
Out[9]:
In [17]:
with pm.Model() as model:
n_mu = pm.Uniform('n_mu', 0, 100)
n_sd = pm.Uniform('n_sd', 0, 100)
normal = pm.Normal('normal', n_mu, sd=n_sd, observed=data)
b_alpha = pm.Uniform('b_alpha', 0, 100)
b_beta = pm.Uniform('b_beta', 0, 100)
beta = pm.Beta('beta', b_alpha, b_beta, observed=data)
trace = pm.sample(10000)
In [18]:
pm.traceplot(trace, combined=True)
Out[18]:
In [19]:
ppc = pm.sample_posterior_predictive(trace, samples=5000, model=model)
In [35]:
plt.figure(figsize=(10,6))
sns.kdeplot(ppc['normal'].flatten(), label='normal', lw=3)
sns.kdeplot(ppc['beta'].flatten(), label='beta', lw=3)
sns.distplot(data, label='data')
plt.legend()
Out[35]:
In [ ]:
In [ ]:
In [ ]: